Skip to content

SongDownloader: write metadata to m4a (DASH) downloads - #239

Closed
np3ir wants to merge 1 commit into
Inrixia:masterfrom
np3ir:feat/tag-m4a-downloads
Closed

SongDownloader: write metadata to m4a (DASH) downloads#239
np3ir wants to merge 1 commit into
Inrixia:masterfrom
np3ir:feat/tag-m4a-downloads

Conversation

@np3ir

@np3ir np3ir commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Currently only FLAC downloads get tagged (the FlacStreamTagger runs in-flight on the vnd.tidal.bts branch), while DASH streams are written to disk as raw untagged m4a files.

This PR adds a post-download tagging step using node-taglib-sharp (pure JS, no ffmpeg or native binaries): when the downloaded file resolves to m4a, the same tags Luna already builds (flacTags()) are written to the file, including cover art. Individual fields that fail to write are skipped best-effort so a bad tag never corrupts the download.

Generated with Claude Code

FLAC downloads are tagged in-flight by the FlacStreamTagger, but DASH
streams are written to disk untagged. After a download that resolves to
a m4a file, write the same tags (title, artists, album, cover, etc.)
post-download using node-taglib-sharp (pure JS, no ffmpeg or native
binaries).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Inrixia

Inrixia commented Jul 13, 2026

Copy link
Copy Markdown
Owner

Have you tested this verifying it works?

Also going to close this, please integrate the library/functionality (after validating it works) into the main Luna lib which has all the tag generation etc already handled.

@np3ir

np3ir commented Jul 14, 2026

Copy link
Copy Markdown
Contributor Author

Fair call — it turned out it did NOT work as submitted: TIDAL DASH downloads are raw concatenated CMAF segments (fragmented MP4), and node-taglib-sharp can't write tags to those at all. Tagging requires remuxing to a progressive MP4 first.

Now integrated into the Luna lib as requested, with a pure-JS remux (bit-identical packet copy, encoder delay/gapless preserved) and validated end to end (MD5-verified offline + live in the client): Inrixia/TidaLuna#176

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants